<?php
class Model_MapperEvenement implements Model_IMapper
{
	private $table = null;
	
	public function __construct($str_table, $pdo)
	{
		$this->table = new Model_TableEvenement();
		$this->table->setConnexion($pdo);
		$this->table->init();
	}
	
	public function getAll()
	{
		$results = array();
		foreach($this->table->fetchAll() as $ligne)
		{
			$entity = new Model_Evenement();
			$entity->setId_evenement($ligne['id_evenement']);
                        $entity->setDate_debut($ligne['date_debut']);
                        $entity->setDate_fin($ligne['date_fin']);
			$entity->setTitre($ligne['titre']);
			$entity->setImage($ligne['image']);
			$entity->setContenu($ligne['contenu']);
			$entity->setTags($ligne['tags']);
			$entity->setPublie($ligne['publie']);
			$entity->setDate_creation($ligne['date_creation']);
			$entity->setDate_modification($ligne['date_modification']);
			
			//recupere l'adresse
			$adressemap = new Model_MapperAdresse("adresse", $this->table->getConnexion());
			$adresse = $adressemap->getOne($ligne['id_adresse']);
			
			if(!is_null($adresse))
				$entity->setAdresse($adresse);
				
			//recupere la categorie
			$categoriemap = new Model_MapperCategorie("categorie", $this->table->getConnexion());
			$categorie = $categoriemap->getOne($ligne['id_categorie']);
			
			if(!is_null($categorie))
				$entity->setCategorie($categorie);

                        //recupere l'association
                        $associationmap = new Model_MapperAssociation("assciation", $this->table->getConnexion());
                        $association = $associationmap->getOne($ligne['id_association']);

                        if(!is_null($association))
                            $entity->setAssociation($association);
					
			$results[] = $entity;
		}
		return $results;
	}
	
	public function getOne($id)
	{
		$ligne = $this->table->fetchOne($id);
		if(!empty($ligne['id_evenement']) )
		{
			$entity = new Model_Evenement();
			$entity->setId_evenement($ligne['id_evenement']);
                        $entity->setDate_debut($ligne['date_debut']);
                        $entity->setDate_fin($ligne['date_fin']);
			$entity->setTitre($ligne['titre']);
			$entity->setImage($ligne['image']);
			$entity->setContenu($ligne['contenu']);
			$entity->setTags($ligne['tags']);
			$entity->setPublie($ligne['publie']);
			$entity->setDate_creation($ligne['date_creation']);
			$entity->setDate_modification($ligne['date_modification']);
			
			//recupere l'adresse
			$adressemap = new Model_MapperAdresse("adresse", $this->table->getConnexion());
			$adresse = $adressemap->getOne($ligne['id_adresse']);
			
			if(!is_null($adresse))
				$entity->setAdresse($adresse);
				
			//recupere la categorie
			$categoriemap = new Model_MapperCategorie("categorie", $this->table->getConnexion());
			$categorie = $categoriemap->getOne($ligne['id_categorie']);
			
			if(!is_null($categorie))
				$entity->setCategorie($categorie);

                        //recupere l'association
                        $associationmap = new Model_MapperAssociation("assciation", $this->table->getConnexion());
                        $association = $associationmap->getOne($ligne['id_association']);

                        if(!is_null($association))
                            $entity->setAssociation($association);
		}
		else 
		{
			$entity = null;
		}
		return $entity;
	}
	
	public function save(Model_IEntity $object)
	{
		if($object->getId_evenement() == -1)
		{
			$id = $this->table->insert(
                                $object->getDate_debut()->format('Y-m-j H:i:s'),
                                $object->getDate_fin()->format('Y-m-j H:i:s'),
				$object->getTitre(),
				$object->getImage(),
				$object->getContenu(),
				$object->getTags(),
				$object->getPublie(),
				$object->getDate_creation()->format('Y-m-j H:i:s'),
				$object->getDate_modification()->format('Y-m-j H:i:s'),
				$object->getAdresse()->getId_adresse(),
				$object->getCategorie()->getId_categorie(),
                                $object->getAssociation()->getId_association()
			);
			$object->setId_evenement($id);
		}
		else
		{
			$this->table->update(
				$object->getId_evenement(),
                                $object->getDate_debut()->format('Y-m-j H:i:s'),
                                $object->getDate_fin()->format('Y-m-j H:i:s'),
				$object->getTitre(),
				$object->getImage(),
				$object->getContenu(),
				$object->getTags(),
				$object->getPublie(),
				$object->getDate_creation()->format('Y-m-j H:i:s'),
				$object->getDate_modification()->format('Y-m-j H:i:s'),
				$object->getAdresse()->getId_adresse(),
				$object->getCategorie()->getId_categorie(),
                                $object->getAssociation()->getId_association()
			);
		}
	}
	
	public function delete(Model_IEntity $object)
	{
		$this->table->delete($object->getId_evenement());
	}
}